package w_controller

import (
	"github.com/gin-gonic/gin"
	"strconv"
	"wms-go/modules/m_db"
	"wms-go/modules/m_utils"
	"wms-go/web/w_mapper"
	"wms-go/web/w_model"
)

type kcController struct {
}

func (controller *kcController) ItemById(c *gin.Context) {
	id := c.Param("id")
	mapper := w_mapper.KcMapper{
		DB:  m_db.GetDB(),
		Ctx: c,
	}
	item, err := mapper.QueryById(id)
	if err != nil {
		m_utils.Error(c, -1, err, "")
		return
	}
	m_utils.OK(c, item, "ok")
}

func (controller *kcController) DelById(c *gin.Context) {
	id := c.Param("id")
	mapper := w_mapper.KcMapper{
		DB:  m_db.GetDB(),
		Ctx: c,
	}
	err := mapper.DeleteById(id)
	if err != nil {
		m_utils.Error(c, -1, err, "")
		return
	}
	m_utils.OK(c, "", "ok")
}
func (controller *kcController) DelByIds(c *gin.Context) {

	var ids []string
	err := c.ShouldBindJSON(&ids)
	if err != nil {
		m_utils.Error(c, -1, err, "")
		return
	}
	mapper := w_mapper.KcMapper{
		DB:  m_db.GetDB(),
		Ctx: c,
	}
	err = mapper.DeleteByIds(ids)
	if err != nil {
		m_utils.Error(c, -1, err, "")
		return
	}
	m_utils.OK(c, "", "ok")
}

func (controller *kcController) CreateItem(c *gin.Context) {
	var data w_model.SKc
	err := c.ShouldBindJSON(&data)
	if err != nil {
		m_utils.Error(c, -1, err, "")
		return
	}
	mapper := w_mapper.KcMapper{
		DB:  m_db.GetDB(),
		Ctx: c,
	}
	ret, err := mapper.Create(&data)
	if err != nil {
		m_utils.Error(c, -1, err, "")
		return
	}
	m_utils.OK(c, ret, "ok")
}
func (controller *kcController) UpdateItem(c *gin.Context) {
	var data w_model.SKc
	err := c.ShouldBindJSON(&data)
	if err != nil {
		m_utils.Error(c, -1, err, "")
		return
	}
	mapper := w_mapper.KcMapper{
		DB:  m_db.GetDB(),
		Ctx: c,
	}
	ret, err := mapper.Update(&data)
	if err != nil {
		m_utils.Error(c, -1, err, "")
		return
	}
	m_utils.OK(c, ret, "ok")
}
func (controller *kcController) Page(c *gin.Context) {
	var err error
	var from, limit = 1, 10
	if tmp := c.Request.FormValue("limit"); tmp != "" {
		limit, _ = strconv.Atoi(tmp)
	}
	if tmp := c.Request.FormValue("from"); tmp != "" {
		from, _ = strconv.Atoi(tmp)
	}
	mapper := w_mapper.KcMapper{
		DB:  m_db.GetDB(),
		Ctx: c,
	}
	items, total, err := mapper.Page(from, limit)
	if err != nil {
		m_utils.Error(c, -1, err, "")
		return
	}
	m_utils.PageOK(c, items, total, from, limit, "ok")
}
func (controller *kcController) List(c *gin.Context) {
	var err error
	mapper := w_mapper.KcMapper{
		DB:  m_db.GetDB(),
		Ctx: c,
	}
	items, total, err := mapper.List()
	if err != nil {
		m_utils.Error(c, -1, err, "")
		return
	}
	m_utils.ListOK(c, items, total, "ok")
}

func KcRoute(r *gin.Engine) {
	controller := kcController{}
	v1 := r.Group("/wms")
	{
		v1.GET("/v1/kc/page", controller.Page)
		v1.GET("/v1/kc/list", controller.List)
		v1.GET("/v1/kc/:id", controller.ItemById)
		v1.DELETE("/v1/kc/:id", controller.DelById)
		v1.DELETE("/v1/kc/batchByIds", controller.DelByIds)
		v1.PUT("/v1/kc", controller.UpdateItem)
		v1.POST("/v1/kc", controller.CreateItem)
	}
}
